The present invention relates generally to software development and more specifically to various aspects of language development within any of various programming languages, such as a platform-independent, object-oriented programming language, as one example.
In object oriented programming, classes are traditionally referred to nominally. If two class references have the same name (and have the same provenance, such as being loaded from the same class loader or repository), they are considered the same. Additionally, it is a common development technique to generate classes by instantiating a pattern or template. For instance, such instantiations may take the form of hand-coding by a developer, or mechanical template expansion by a tool. While classes generated based on a pattern or template may provide more expressiveness and readability, mechanical template instantiation often relies on brittle mappings between a description of what a class does and a name for the class frequently exposing ugly machine-generated “mangled” names to the user while simultaneously throwing away information in the process (e.g., that the class Account$ImmutableWrapper is the result of applying the “immutable wrapper” template to the type “Account”). If the mapping between the description and the class name changes, two class references with the same name may be binary incompatible because they may no longer perform the same.